ASP.NET Core 3.0 预览版体验
(给DotNet加星标,提升.Net技能)
转自:LineZero
cnblogs.com/linezero/p/aspnetcore3preview.html
目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3。
ASP.NET Core 3.0 之后将不再支持.NET Framework,只运行在.NET Core 上面。
ASP.NET Core 3.0 现在已经出到了第三个预览版,增加和改进了很多功能。
环境准备:
下载最新.NET Core 3.0 Preview 3 SDK, https://dotnet.microsoft.com/download/dotnet-core/3.0。
ASP.NET Core 3.0 需要VS 2019开发,或者使用VS Code,Visual Studio for Mac version 8.0 or later。
Visual Studio 2019 将会在4月2日推出正式版。
下面大致列举一些功能:
Json.NET 不在内置在框架内
如果要将Json.NET支持添加回ASP.NET Core 3.0项目:
首先将包引用添加到Microsoft.AspNetCore.Mvc.NewtonsoftJson
更新ConfigureServices方法以添加AddNewtonsoftJson()。
services.AddMvc()
.AddNewtonsoftJson();
HostBuilder 替换掉WebHostBuilder
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
UseRouting 中间件的增加
示例代码:
app.UseRouting(routes =>
{
routes.MapGet("/hello", context =>
{
return context.Response.WriteAsync("Hi there! linezero");
});
});
同时还增加 MapHealthChecks及RequireHost 等功能,看示例:
app.UseRouting(routes =>
{
routes.MapGet("/", context => context.Response.WriteAsync("Hi linezero!"))
.RequireHost("linezero.com");
routes.MapGet(context => context.Response.WriteAsync("Hi zero!"))
.RequireHost("zero.com");
routes.MapHealthChecks("/healthz").RequireHost("*:8080");
});
Razor Components
razor 组件支持,下面实际看看这个功能点。
dotnet new razorcomponents -o myweb
cd myweb
dotnet run
运行起来如下图:
对应组件代码Counter.razor :
@page "/counter"
<h1>Counter</h1>
<p>LineZero</p>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">
Click me</button>
@functions {
int currentCount = 0;
void IncrementCount()
{
currentCount++;
}
}
你可以直接将组件添加到主页或其他页面,例如放到主页Index.razor:
@page "/"
<h1>Hello, world!</h1>
Welcome to your new app.LineZero
<Counter />
还可以使用 [Parameter] int IncrementSize { get; set; } = 1; 来设置参数:
@functions {
int currentCount = 0;
[Parameter] int IncrementSize { get; set; } = 1;
void IncrementCount()
{
currentCount+=IncrementSize;
}
}
这样可以做到每个页面设置不同的大小,增加不同数量。
如:
@page "/"
<h1>Hello, world!</h1>
Welcome to your new app.LineZero
<Counter IncrementSize="6"/>
下图描述了Razor的一些原理。
另外,Blazor是一个实验性单页面应用程序框架,它使用基于WebAssembly的.NET运行时直接在浏览器中运行Razor Components。
在Blazor应用程序中,Razor组件的UI更新都直接应用于DOM。
运行时编译
从.NET Core 3.0中的ASP.NET Core共享框架中删除了对运行时编译的支持,现在可以通过向应用程序添加软件包来启用它。
要启用运行时编译:
1、添加对Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation的包引用
<PackageReference
Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.0.0-preview3-19153-02" />
2、在Startup.ConfigureServices加入方法AddRazorRuntimeCompilation
services.AddMvc().AddRazorRuntimeCompilation();
Worker Service模板
此模板旨在作为运行长时间运行的后台进程的起点,例如您可以作为Windows服务或Linux守护程序运行。
单页面应用程序模板的身份验证
由IdentityServer在后台提供支持
dotnet new angular -au Individual
dotnet run
最终运行起来,可以进行登录注册,及对API 的保护。
更多可以查看官方文档:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-3.0
gRPC服务模板
dotnet new grpc
会生成两个项目,一个在ASP.NET Core中托管的gRPC服务,以及一个用它来测试它的控制台应用程序。
这是gRPC for ASP.NET Core的第一次公开预览,并没有实现gRPC的所有功能。
对应开源项目: https://github.com/grpc/grpc-dotnet
gRPC 简单介绍可以参照之前文章:
gRPC C#学习:
http://www.cnblogs.com/linezero/p/grpc.html
gRPC.NET Core跨平台学习:https://www.cnblogs.com/linezero/p/grpcnetcore.html
示例代码GitHub:https://github.com/linezero/Blog
推荐阅读
(点击标题可跳转阅读)
看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
喜欢就点一下「好看」呗~